package depots

type Request struct {
	Session RSession `json:"session" form:"session"`
	Context RContext `json:"context" form:"context"`
	Request RRequest `json:"request" from:"request"`
}

type RSession struct {
	Attributes map[string]string `json:"attributes" form:"attributes"`
}

type RContext struct {
	Private RPrivate `json:"Private" form:"Private"`
}

/*
Private.appid	调用应用的 appid
Private.scene	调用应用的场景
Private.userparams	客户端透传参数的 Base64编码
Private.gps.lng	gps 经度
Private.gps.lat	gps 纬度
*/
type RPrivate struct {
	Appid      string             `json:"appid" form:"appid"`
	Scene      string             `json:"scene" form:"scene"`
	Userparams string             `json:"userparams" form:"userparams"`
	Gps        map[string]float64 `json:"gps" form:"gps"`
}

/*
type	请求类型，目前取值仅有 IntentRequest
sid	本次请求的唯一标示，用于查日志
query	用户请求
query.type	用户请求类型，目前取值仅有 text
query.original	当query.type取值为 text 时，此时为用户语音的识别结果
dialogState	当前跳槽对话状态，取值为 STARTED（开始）、 IN_PROGRESS（进行中）、 COMPLETED（已完成开发者在界面上配置的所有环节）
intents	AIUI 理解的语义请求，目前该数组的大小为1
intents.name	意图名称
intents.slots	意图中的槽位信息
intents.confirmationStatus	意图确认状态，取值为 NONE（未确认）、CONFIRMED（确认） DENIED(否认)
intents.slots.*.name	槽位名，与*号内容相同
intents.slots.*.value	槽位值
intents.slots.*.confirmationStatus	槽位确认状态，取值为 NONE（未确认）、CONFIRMED（确认） DENIED(否认)
*/
type RRequest struct {
	Type        string    `json:"type" form:"type"`
	Sid         string    `json:"sid" form:"sid"`
	Query       RQuery    `json:"query" form:"query"`
	DialogState string    `json:"dialogState" form:"dialogState"`
	Intents     []RIntent `json:"intents" form:"intents"`
}

type RQuery struct {
	Type     string `json:"type" form:"type"`
	Original string `json:"original" form:"original"`
}

type RIntent struct {
	Name               string           `json:"name" form:"name"`
	Slots              map[string]RSlot `json:"slots" form:"slots"`
	ConfirmationStatus string           `json:"confirmationStatus" form:"confirmationStatus"`
}

type RSlot struct {
	Name               string `json:"name" form:"name"`
	Value              string `json:"value" form:"value"`
	ConfirmationStatus string `json:"confirmationStatus" form:"confirmationStatus"`
}

// 获取slot
func (rq *Request) GetSlot(slotName string) *RSlot {
	for _, v := range rq.Request.Intents[0].Slots {
		if v.Name == slotName {
			return &v
		}
	}
	return nil
}
